import axios from 'axios'
import {Message} from 'element-ui'
import store from '@/store'
import {getToken} from '@/request/token'

const service = axios.create({
  baseURL: process.env.BASE_API,
  timeout: 10000 ,
  headers: {
    'Content-Type': 'application/json; charset=utf-8'
  }
})

//request拦截器
service.interceptors.request.use(config => {
  if ( store.state.token ) {
    config.headers['Authorization'] = getToken()
  }
  return config
}, error => {
  Promise.reject(error)
})

// respone拦截器
service.interceptors.response.use(
  response => {

    //全局统一处理 Session超时
    if (response.headers['session_time_out'] == 'timeout') {
      store.dispatch('fedLogOut')
    }

    const res = response.data;
    console.log("res : " , res)
    // 返回的数据固定有
    // code: 200
    // msg: "success"
    // success: "good"
    // token: "token"

    //200 为成功状态
    if (res.code !== 200) {

      //5050 Session超时
      if (res.code === 5050) {
        return Promise.reject('error');
      }

      //5001 用户未登录
      if (res.code === 5001) {

        Message({
          type: 'warning',
          showClose: true,
          message: '未登录或登录超时，请重新登录哦'
        })

        return Promise.reject('error');
      }

      //5002 权限认证错误
      if (res.code === 5002) {
        console.info("权限认证错误")
        Message({
          type: 'warning',
          showClose: true,
          message: '你没有权限访问哦'
        })
        return Promise.reject('error');
      }

      return Promise.reject(res.msg);
    } else {
      return response.data;
    }
  },
  error => {
    Message({
      type: 'warning',
      showClose: true,
      message: '连接超时'
    })
    return Promise.reject('error')
  })


/**
 * 请求地址处理
 * @param {*} actionName action方法名称
 */
 service.adornUrl = (actionName) => {
  return (process.env.NODE_ENV !== 'production' && process.env.BASE_API) + actionName
}

export default service
